// pages/shipAdd/shipAdd.js
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 后台数据，多项
    objArray: [],
    // 当前选中数组
    // 所在港口
    multiArray: [
      [],
      [],
      []
    ],
    // 下一港口
    multiArray2: [
      [],
      [],
      []
    ],
    // 当前选中的数组下标值
    multiIndex: [0, 0, 0],
    multiIndex2: [0, 0, 0],

    // 单项 
    //目的
    purposeArr: [],
    purposeIndex: 0,
    // 货物信息
    goodsArr: [],
    goodsIndex: 0,

    // 默认选择
    shipName: '',
    goodsWeight: '',
    // 港口选择
    // 全部
    current: '中国 天津 天津港',
    next: '中国 天津 天津港',
    // 国家
    currentCountry: '中国 天津',
    nextCountry: '中国 天津',
    // 港口
    currentCountryPort: '天津港',
    nextCountryPort: '天津港',

    // 时间 时分
    hourMinuteSecond: new Date().getFullYear() + "-" + Number(new Date().getMonth() + 1) + "-" + new Date().getDate() + " " + new Date().getHours() + ":" + new Date().getMinutes(),
    hourMinuteSecond2: new Date().getFullYear() + "-" + Number(new Date().getMonth() + 1) + "-" + new Date().getDate() + " " + new Date().getHours() + ":" + new Date().getMinutes(),

    // 单项 信息
    goods: "普通货物",
    // 单项 目的
    purpose: "装载",
    // 是否进站 单选
    site: true,
    // 是否违禁
    violation: "是",
    // 有无证明
    prove: '有',
    // 多图片上传
    imgs: [],
    // 重复姓名
    repeatName: null,
    // 显示 修改按钮
    modify: true,
    // 修改id
    modifyId: null,
  },

  // 表单提交
  formsubmit(e) {
    let _this = this;
    let darkBlue_shipName = _this.data.shipName;
    let darkBlue_goodsWeight = _this.data.goodsWeight;
    let darkBlue_shipPhoto = _this.data.imgs;
    let repeatName = _this.data.repeatName;
    if (darkBlue_shipName == '') { //如果名称为空
      wx: wx.showToast({
        title: '请输入船舶名称',
        icon: 'error',
        duration: 2000
      })
      return false
    }
    else if (repeatName.indexOf(darkBlue_shipName) != -1) { //如果名称重复
      wx: wx.showToast({
        title: '名称重复',
        icon: 'error',
        duration: 2000
      })
      return false
    }
    else if (darkBlue_goodsWeight == '') { //如果重量为空
      wx: wx.showToast({
        title: '请输入货物重量',
        icon: 'error',
        duration: 2000
      })
      return false
    }
    else if (!darkBlue_shipPhoto.length) { //如果上传图片为空
      wx: wx.showToast({
        title: '请上传图片',
        icon: 'error',
        duration: 2000
      })
      return false
    }
    else {
      // 云函数语法
      wx.cloud.callFunction({
        name: "setShipInfo",
        data: {
          darkBlue_shipName, // 名称
          darkBlue_current: _this.data.current, // 所在港口 总数据
          darkBlue_next: _this.data.next, // 下个港口 总数据
          darkBlue_currentCountry: _this.data.currentCountry, // 当前国家
          darkBlue_nextCountry: _this.data.nextCountry, // 下一国家
          darkBlue_currentCountryPort: _this.data.currentCountryPort, // 目前港口
          darkBlue_nextCountryPort: _this.data.nextCountryPort, // 下个港口
          darkBlue_expected: _this.data.hourMinuteSecond, // 预计出港
          darkBlue_arrive: _this.data.hourMinuteSecond2, // 预计到港
          darkBlue_goodsInfo: _this.data.goods, // 货物信息
          darkBlue_purpose: _this.data.purpose, //目的
          darkBlue_site: _this.data.site, //进出站
          darkBlue_violation: _this.data.violation, //违禁
          darkBlue_prove: _this.data.prove, // 证明
          darkBlue_goodsWeight, // 重量
          darkBlue_shipPhoto, //上传图片
          darkBlue_goodsInfoIndex: _this.data.goodsIndex, // 货物信息 下标
          darkBlue_purposeIndex: _this.data.purposeIndex, //目的 下标
        },
        success: (res) => {
          console.log(res);
          wx.switchTab({
            url: '/pages/ship/ship',
          })
        }
      })
    }
  },

  // changeSubmit 修改提交
  changeSubmit() {
    let _this = this;
    let darkBlue_shipName = _this.data.shipName; // 名称
    let darkBlue_goodsWeight = _this.data.goodsWeight; //重量
    let darkBlue_shipPhoto = _this.data.imgs; // 多图片
    let index = _this.data.modifyId; //修改ID
    if (darkBlue_goodsWeight == '') { //如果重量为空
      wx: wx.showToast({
        title: '请输入货物重量',
        icon: 'error',
        duration: 2000
      })
      return false
    }
    else if (!darkBlue_shipPhoto.length) { //如果上传图片为空
      wx: wx.showToast({
        title: '请您上传图片',
        icon: 'error',
        duration: 2000
      })
      return false
    }
    else {
      // 云函数调用
      wx.cloud.callFunction({
        name: "updateShipInfo",
        data: {
          index,
          darkBlue_shipName, // 名称
          darkBlue_current: _this.data.current, // 所在港口 总数据
          darkBlue_next: _this.data.next, // 下个港口 总数据
          darkBlue_currentCountry: _this.data.currentCountry, // 当前国家
          darkBlue_nextCountry: _this.data.nextCountry, // 下一国家
          darkBlue_currentCountryPort: _this.data.currentCountryPort, // 目前港口
          darkBlue_nextCountryPort: _this.data.nextCountryPort, // 下个港口
          darkBlue_expected: _this.data.hourMinuteSecond, // 预计出港
          darkBlue_arrive: _this.data.hourMinuteSecond2, // 预计到港
          darkBlue_goodsInfo: _this.data.goods, // 货物信息
          darkBlue_purpose: _this.data.purpose, //目的
          darkBlue_site: _this.data.site, //进出站
          darkBlue_violation: _this.data.violation, //违禁
          darkBlue_prove: _this.data.prove, // 证明
          darkBlue_goodsWeight, // 重量
          darkBlue_goodsInfoIndex: _this.data.goodsIndex, // 货物信息 下标
          darkBlue_purposeIndex: _this.data.purposeIndex, //目的 下标
          darkBlue_shipPhoto, //上传图片
        },
        success: (res) => {
          console.log(res);
          wx.navigateBack({
            delta: 1
          })
        }
      })
    }
  },

  // 输入框
  shipName(e) {
    this.setData({
      shipName: e.detail.value
    })
  },

  goodsWeight(e) {
    this.setData({
      goodsWeight: e.detail.value
    })
  },

  // 多图片上传
  upload() {
    // 从本地相册选择图片或使用相机拍照
    wx.chooseImage({
      count: 9,
      success: (res) => {
        // console.log(res);
        let pathLists = res.tempFilePaths; //图片列表

        // 提交图片
        this.uploadImages(pathLists, 0, [], (res) => {
          // console.log("所有图片云地址=>", res);
          this.setData({
            imgs: res
          })
        });
      }
    })
  },

  // 提交多张图片方法，处理云存储
  uploadImages(imgs, index, result, callback) {
    let _this = this;

    // 重定义图片名称
    let indexOf = imgs[index].lastIndexOf("."); //点位置
    let ext = imgs[index].substr(indexOf); //切割字符串 .png
    let name = '船舶信息';
    let time = new Date().getTime(); //时间戳

    wx.cloud.uploadFile({
      cloudPath: 'ship/' + name + "_" + time + ext, // 上传至云端的路径
      filePath: imgs[index], // 小程序临时文件路径
      success: res => { //成功上传图片
        // 图片上传成功记录图片地址
        result.push(res.fileID);
      },
      fail(err) { //失败上传图片
        callback(err);
      },
      // 方法执行结束
      complete() {
        // 判断上传图片数组长度
        if ((index + 1) == imgs.length) { //上传图片结束
          callback(result);
        } else { //继续上传图片，回调当前函数
          index += 1;
          _this.uploadImages(imgs, index, result, callback); //回调
        }
      }
    })
  },

  // 是否进站
  siteChange(e) {
    // JSON.parse(e.detail.value) 转布尔类型
    this.setData({
      site: JSON.parse(e.detail.value)
    })
  },

  // 是否违禁
  violationChange(e) {
    this.setData({
      violation: e.detail.value
    })
  },

  // 有无证明
  proveChange(e) {
    // console.log(e.detail.value);
    this.setData({
      prove: e.detail.value
    })
  },

  // 目的选择
  purposeChange(e) {
    this.setData({
      purposeIndex: parseInt(e.detail.value),
      purpose: this.data.purposeArr[parseInt(e.detail.value)]
    })
  },

  // 货物选择
  goodsChange(e) {
    this.setData({
      goodsIndex: parseInt(e.detail.value),
      goods: this.data.goodsArr[parseInt(e.detail.value)]
    })
  },
  // 时间选择
  // 时分的事件方法
  selectDateMinuteChange(e) {
    this.setData({
      hourMinuteSecond: e.detail.value
    })
  },
  selectDateMinuteChange2(e) {
    this.setData({
      hourMinuteSecond2: e.detail.value
    })
  },

  // 港口选择
  // 所在港口
  pickerChange: function (e) {
    var objArray = this.data.objArray,
      multiIndex = this.data.multiIndex,
      multiArray = this.data.multiArray;

    //此处e.detail.value为当前选择的列的下标值数组，如[0,1,0]
    console.log('picker发送选择改变，携带值为', e.detail.value);
    console.log('picker发送选择改变，携带值为', typeof e.detail.value);
    console.log('picker最终选择值为：', multiArray[0][multiIndex[0]], multiArray[1][multiIndex[1]], multiArray[2][multiIndex[2]]);
    this.setData({
      multiIndex: e.detail.value,
      current: multiArray[0][multiIndex[0]] + " " + multiArray[1][multiIndex[1]] + " " + multiArray[2][multiIndex[2]],
      currentCountry: multiArray[0][multiIndex[0]] + " " + multiArray[1][multiIndex[1]],
      currentCountryPort: multiArray[2][multiIndex[2]]
    })
  },
  // 下一港口
  pickerChange2: function (e) {
    var objArray = this.data.objArray,
      multiIndex2 = this.data.multiIndex2,
      multiArray2 = this.data.multiArray2;

    //此处e.detail.value为当前选择的列的下标值数组，如[0,1,0]
    console.log('picker发送选择改变，携带值为', e.detail.value);
    console.log('picker最终选择值为：', multiArray2[0][multiIndex2[0]], multiArray2[1][multiIndex2[1]], multiArray2[2][multiIndex2[2]]);

    this.setData({
      multiIndex2: e.detail.value,
      next: multiArray2[0][multiIndex2[0]] + " " + multiArray2[1][multiIndex2[1]] + " " + multiArray2[2][multiIndex2[2]],
      nextCountry: multiArray2[0][multiIndex2[0]] + " " + multiArray2[1][multiIndex2[1]],
      nextCountryPort: multiArray2[2][multiIndex2[2]]
    })
  },

  //多列自创选择器换列方法 当列改变时
  pickerColumnChange: function (e) {
    var objArray = this.data.objArray,
      multiIndex = this.data.multiIndex,
      multiArray = this.data.multiArray;

    multiIndex[e.detail.column] = e.detail.value;

    var searchColumn = () => {
      var arr1 = [];
      var arr2 = [];

      // 获取第一层数据   i单个 j数字 k原数组
      objArray.forEach((item1, num1) => {
        if (num1 == multiIndex[0]) {
          // 获取第二层数据 
          item1.category.forEach((item2, num2) => {
            arr1.push(item2.classify_name);
            if (num2 == multiIndex[1]) {
              // 获取第三层数据 
              item2.category.forEach((item3) => {
                arr2.push(item3.classify_name);
              })
              multiArray[2] = arr2;
            }
          })
          multiArray[1] = arr1;
        }
      });
    }

    switch (e.detail.column) {
      case 0:
        multiIndex[1] = 0;
        multiIndex[2] = 0;
        searchColumn();
        break;
      case 1:
        multiIndex[2] = 0;
        searchColumn();
        break;
    }

    this.setData({
      multiArray: multiArray,
      multiIndex: multiIndex,
    });
  },
  //多列自创选择器换列方法 当列改变时
  pickerColumnChange2: function (e) {
    var objArray = this.data.objArray,
      multiIndex2 = this.data.multiIndex2,
      multiArray2 = this.data.multiArray2;

    multiIndex2[e.detail.column] = e.detail.value;

    var searchColumn = () => {
      var arr1 = [];
      var arr2 = [];

      // 获取第一层数据   i单个 j数字 k原数组
      objArray.forEach((item1, num1) => {
        if (num1 == multiIndex2[0]) {
          // 获取第二层数据 
          item1.category.forEach((item2, num2) => {
            arr1.push(item2.classify_name);
            if (num2 == multiIndex2[1]) {
              // 获取第三层数据 
              item2.category.forEach((item3) => {
                arr2.push(item3.classify_name);
              })
              multiArray2[2] = arr2;
            }
          })
          multiArray2[1] = arr1;
        }
      });
    }

    switch (e.detail.column) {
      case 0:
        multiIndex2[1] = 0;
        multiIndex2[2] = 0;
        searchColumn();
        break;
      case 1:
        multiIndex2[2] = 0;
        searchColumn();
        break;
    }

    this.setData({
      multiArray2: multiArray2,
      multiIndex2: multiIndex2,
    });
  },

  // getDarkBluePort 访问数据库 
  getDarkBluePort() {
    // this指向问题
    let _this = this;
    // 云函数语法
    wx.cloud.callFunction({
      name: "getShipPort",
      success: (res) => {
        // 获取船只添加信息
        let arr = res.result.data[0];
        // console.log(res.result.data[0].message); //获取所有数据
        let data = {
          // 多项选择
          objArray: arr.message, //动态数据
          multiArray: _this.data.multiArray, //多选数据
          multiArray2: _this.data.multiArray2, //多选数据   

          // 单项选择
          goodsArr: arr.goods, // 货物信息   
          purposeArr: arr.purpose, // 目的
        };
        // 放入数据数据(不然没有内容)
        // 获取第一层数据 
        data.objArray.forEach(item => {
          data.multiArray[0].push(item.classify_name);
          // 获取第二层数据 
          item.category.forEach(it => {
            data.multiArray[1].push(it.classify_name);
            // 获取第三层数据 
            it.category.forEach(i => {
              data.multiArray[2].push(i.classify_name);
            })
          })
        });

        // 获取第一层数据 
        data.objArray.forEach(item => {
          data.multiArray2[0].push(item.classify_name);
          // 获取第二层数据 
          item.category.forEach(it => {
            data.multiArray2[1].push(it.classify_name);
            // 获取第三层数据 
            it.category.forEach(i => {
              data.multiArray2[2].push(i.classify_name);
            })
          })
        });
        _this.setData(data);
      }
    })


    // 云函数语法 查重复
    let repeatName = [];
    wx.cloud.callFunction({
      // 需调用的云函数名
      name: 'getShipName',
      // 成功回调
      success: (res) => {
        // console.log(res.result);
        res.result.forEach(item => {
          repeatName.push(item.darkBlue_shipName);
        })
        _this.setData({
          repeatName
        })
      }
    })
  },

  // 修改访问数据，赋值给页面，然后可进行修改
  getDarkBlueShipInfoData() {
    let _this = this;
    let index = _this.data.modifyId;
    // 获取一个记录的数据
    wx.cloud.callFunction({
      name: "queryShipInfo",
      data: {
        index
      },
      success: (res) => {
        // 包含该记录的数据
        // console.log(res)
        let arr = res.result.data;
        _this.setData({
          shipName: arr.darkBlue_shipName, // 名称
          current: arr.darkBlue_current, // 所在港口 总数据
          next: arr.darkBlue_next, // 下个港口 总数据
          currentCountry: arr.darkBlue_currentCountry, // 当前国家
          nextCountry: arr.darkBlue_nextCountry, // 下一国家
          currentCountryPort: arr.darkBlue_currentCountryPort, // 目前港口
          nextCountryPort: arr.darkBlue_nextCountryPort, // 下个港口
          hourMinuteSecond: arr.darkBlue_expected, // 预计出港
          hourMinuteSecond2: arr.darkBlue_arrive, // 预计到港
          goods: arr.darkBlue_goodsInfo, // 货物信息
          purpose: arr.darkBlue_purpose, //目的
          site: arr.darkBlue_site, //进出站
          violation: arr.darkBlue_violation, //违禁
          prove: arr.darkBlue_prove, // 证明
          goodsWeight: arr.darkBlue_goodsWeight, // 重量
          purposeIndex: arr.darkBlue_purposeIndex, // 货物信息 下标
          goodsIndex: arr.darkBlue_goodsInfoIndex, //目的 下标
          imgs: arr.darkBlue_shipPhoto, //上传图片
        })
      }
    })
  },
  // 
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log(options);
    let _this = this;
    let modifyId = options.id;
    // 提示
    if (wx.getStorageSync('root')) {
      _this.getDarkBluePort();
      if (modifyId) {
        _this.setData({
          modify: false,
          modifyId
        })
        _this.getDarkBlueShipInfoData();
      }
    } else {
      wx.showModal({
        title: '提示',
        content: '您没有权限',
        success(res) {
          if (res.confirm) {
            // 跳转到 登录（我的）页面
            wx.navigateBack({
              delta: 1
            })
          } else if (res.cancel) {
            // console.log('用户点击取消')
            wx.navigateBack({
              delta: 1
            })
          }
        }
      })
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})